Max/MSP/Jitter 教程06 - 控制视频播放
Max/MSP/Jitter 教程 01 - 什么是矩阵?
Max/MSP/Jitter 教程 02 - Jitter 对象的属性
Max/MSP/Jitter 教程 03 - 播放 QuickTime 视频
Max/MSP/Jitter 教程 04 - 创建矩阵
Max/MSP/Jitter 教程 05 - 矩阵的数学运算
00 翻译自 Cycling74 的 Max/MSP/Jitter 官方文档:Tutorial 4: Controlling Movie Playback
https://docs.cycling74.com/max7/tutorials/jitterchapter04
本教程讲解在 Jitter 中播放 QuickTime 视频的进阶知识。我们将学习如何获得正在播放的视频的信息,以及如何更改速度、音量和循环点来控制视频的播放。
你应该已经熟悉 patch 中的两个 Jitter 对象: jit.movie
和 jit.pwindow
。其余部分尝试改变已加载到 jit.movie
对象中的视频的播放行为。
patch 的左边部分我们很熟悉了:
打开并播放视频
点击消息框 read crashtest.mov
,打开文件。
jit.movie
一读入视频就开始播放。这个视频有配乐,因此视频加载后会立即听到音乐。视频配乐由计算机内置音响而不是 MSP 播放。如果不希望听到声音,可以将消息框 vol $
的数字 1 改为 0。
即使视频正在播放,jit.pwindow
没有显示任何东西,因为 jit.movie
需要 bang 消息才能发送矩阵到 jit.pwindow
。单击连接到其入口的开关,启动 metro
对象。这时视频图像出现在 jit.pwindow
中。先忽略 gettime
消息,等会我们会提到。
获取视频信息
jit.movie
打开新的视频时,会读取视频的大量信息(包含在视频的标题中),包括视频的长度、有多少帧、播放速度等。我们用这些元数据来控制视频播放。
要点:与许多可手动设置或由对象本身设置的 Jitter 属性不同,
jit.movie
的许多属性都依赖于当前的视频文件。不同视频生成不同的设置。
要对 QuickTime 视频做的第一件事是读取元数据属性。可以向 jit.movie
发送 get
消息来检索。然后解析对象最右输出口的响应消息。我们需要的信息是帧速率,时间单位(time scale)(一秒钟内 “QuickTime 时间单位” 的数量),持续时间(QuickTime 的单位),播放速率和音量。这些都通过带有 getfps, gettimescale, getduration, getrate, getvol
的消息框获得。
让 jit.movie
打开一个视频并播放时(发送read
消息),它会向右输出口发送一条消息,告诉你它已找到视频并知道如何播放。如果要将打印对象连接到 jit.movie
的右输出口并重新加载影片,会在 Max Console 中看到:read crashtest.mov 1
。
在这个 patch 中,jit.movie
的右输出口连接了一个 route
对象。加载成功后它收到 read
消息并传递给 unpack
和 select
,再触发 get
消息。如果无法找到 crashtest.mov 文件,会在文件名后看到 1 以外的数字,并且不会发出请求。
除了捕获 read
消息之外,route
对象在接收到视频信息后做分发。Jitter 属性一般都由在 patch 中设置为相同格式的对象输出:属性的名称,后跟需要设置的信息。route
出口连接了数字框,以显示分发的值。虽然还不知道那些值代表什么,但是每次 jit.movie
成功加载新视频时都会显示属性。
开始,停止和减速
patch 的顶部有一些可以更改 jit.movie
回放行为的控件。向 jit.movie
发送 stop
消息,将在视频当前帧停止播放。发送 start
消息将从上次停止的位置恢复播放。视频播放停止时,视频文件中的所有音轨也都将停止。停止和启动视频对 jit.movie
对象的矩阵输出没有影响,该输出仍然由 metro
对象控制。如果在开启 metro
的情况下停止播放视频,仍将以 metro
的速度收到新的矩阵对象(这里是每秒 25 次),虽然所有矩阵都是相同的。
更改视频的速率将改变音视频内容的播放速度。正的速率值使视频向前播放,值为 1 表示正常播放速度。负值将使视频倒退,速率为 0 将停止播放。jit.movie
的速度属性以浮点数为参数,因此值 0.5 会使视频播放速度减半,值 -2.3 以超过两倍的速度向后回放。调整这个值时,音轨会加速、减速、向后播放,跟视频保持同步。一旦视频到达其最后一帧(或回放时的第一帧),它将循环到文件的另一端。将 jit.movie
的 loop 属性设置为 0(无循环),1(常规循环)或 2(回文循环),可以更改此行为。
vol
属性控制视频音轨的音量(响度)。1 为全音量,0 将关闭声音。
加载视频时,速率和音量属性都由 pathc 中间的消息框初始化。它们会给出每个 QuickTime 影片中存储的值。
时间属性
之前查询了三个属性:duration,timescale 和 fps,告诉我们视频文件如何处理时间。Duration 说明了视频的总长度。这个值不以毫秒或帧表示,而是以 QuickTime 时间单位表示。每个时间单位的实际长度,取决于视频的时间单位。视频的 timescale 是每秒视频的分辨率。视频的duration / timescale 会得出视频的大致长度,以秒为单位。
例如, crashtest.mov 文件有一个持续时间为 2836 个时间单位和 600 的 timescale。视频大约持续 4.73 秒。如果想要用 2 秒钟播放视频,可以将 jit.movie
设置 time 1200
(1200 时间单位除以 600 单位/秒的时间刻度得到 2 秒)。
视频中的 fps (或每秒帧数)说明每秒显示多少单独的视频图像。fps 越高,视频播放就越平滑(假设每帧都不一样)。常见的 fps 速率是15, 24, 29.97 和 30。这个例子中的视频以每秒 15 帧的速度播放,也就是每 40 个时间单位,或大约每 66.7毫秒,会更新一个视频帧。如果用 crashtest.mov 的持续时间,除以视频中每帧的 time units,可以得到视频文件有 70 帧。如果需要,可以用 getframecount
消息查询 jit.movie
视频中的总帧数。
截取和循环
显示和设置当前播放帧
patch 底部区域包含两个进一步操作视频播放的控件。左侧的数字框显示视频当前正在播放的帧。该值由 patch 顶部的 metro
对象发送到 jit.movie
的 gettime
消息更新; 每次输出新的一帧时,时间都会更新。如果停止视频传输(向 jit.movie
发送 stop
消息),可以拖动数字框来“截取”视频。视频会跳转到 frame
消息指定的参数那一帧。
设置视频中的循环点
用两个整数参数设置 looppoints
属性,可以将循环点(指定循环开始和结束的时间值)发送到 jit.movie
。教程 patch 中的 rslider 可以指定 jit.movie
的循环区间。在加载视频时查询属性,将 rslider 的大小设置为视频的时长。可以发送不带参数的 looppoints
消息重置循环点。
小结
jit.movie
提供了一些简单的属性来改变 QuickTime 播放内容的方式。可以使用这些消息停止和开始播放视频。速度属性可以改变播放速度和视频播放的方向。使用 vol 属性控制视频音轨的音量。
查询 duration,time scale 和 fps 等属性可获取加载到 jit.movie
中视频的属性。用 frame
消息可跳转到视频中的特定帧,并且可以设置和检索循环点。发送 gettime
消息可以查询视频的当前时间位置。
更多强大的功能(例如编辑和保存视频)将在后面的教程中讨论。
友情提示:独自折腾 Max 易患上癔症……不妨入群互助
👇👇👇
更多 Max/MSP 应用,请翻阅 MakeNoise 系列
MakeNoise01 - 声音是什么?
MakeNoise02 - 频率和音高
MakeNoise03 - 振幅/响度/音量/增益 大乱斗
MakeNoise04 - 波形和相位
MakeNoise05 - Envelope 包络(ADSR)
MakeNoise06 - 音色和均衡器(EQ)
MakeNoise07 - 音频的「分辨率」
MakeNoise08 - 振荡器和滤波器
MakeNoise09 - 压缩 Compression
MakeNoise10 - 延时和混响